package com.app.sgd.business.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

import com.app.sgd.model.bean.DocumentoVinculado;
import com.app.sgd.plugin.JNDIConnector;
import com.app.sgd.view.vo.FiltroBusquedaVO;

public class SQLDocumentoVinculadoDAO {
private static Logger logger = Logger.getLogger(SQLDocumentoVinculadoDAO.class);
	
	DataSource ds = null;
	JNDIConnector cn = new JNDIConnector();
	
	public ArrayList filtrarDocumentosVincular(FiltroBusquedaVO filtroBusquedaVO) throws Exception {
		ArrayList lstDocumentos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
		try{
			conn = cn.connect().getConnection();
	    	
	    	String vSQL = "{call std_sp_busqueda_documentos_vincular(?,?,?,?,?,?,?,?,?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1,Integer.parseInt(filtroBusquedaVO.getUsuario().getCodigo()));
            call.setInt(2,Integer.parseInt(filtroBusquedaVO.getUsuario().getEncargaturaPerfil().getCodArea()));
            call.setInt(3,Integer.parseInt(filtroBusquedaVO.getCodTipoDocumento()));
            call.setString(4,filtroBusquedaVO.getNumDocumento());
            call.setString(5,filtroBusquedaVO.getFechaInicio());
            call.setString(6,filtroBusquedaVO.getFechaFin());
            call.setString(7,filtroBusquedaVO.getAsunto());
            call.setString(8,filtroBusquedaVO.getNombreDestinatario());
            int flg_adm_juo = 0;
            if(filtroBusquedaVO.getUsuario().isPrivilegioAdministrador() || filtroBusquedaVO.getUsuario().isPrivilegioJefeUnidadOrganica())
            	flg_adm_juo = 1;
            call.setInt(9,flg_adm_juo);
            call.setInt(10,Integer.parseInt(filtroBusquedaVO.getFlgRpta()));
            
//            logger.info("SQL = " + vSQL + "("+filtroBusquedaVO.getUsuario().getCodigo()+","+filtroBusquedaVO.getUsuario().getArea().getCodigo()+")");
            logger.info("inicio std_sp_busqueda_documentos_vincular:" + new Date());
            
            rs = call.executeQuery();
            logger.info("fin std_sp_busqueda_documentos_vincular: " + new Date());
            
            int ind=0;
            while(rs.next()){
            	DocumentoVinculado documento = new DocumentoVinculado();
            	documento.setIndiceDocVinculado(String.valueOf(ind++));
            	documento.setCodDocumento(rs.getString("codigoDocumento"));
            	documento.setNumDocumento(rs.getString("numeroDocumento"));
            	documento.setAsunto(rs.getString("asunto"));
            	documento.setNombreEmisor(rs.getString("nombreEmisor"));
            	documento.setNombreDestinatario(rs.getString("nombreDestinatario"));
            	documento.setCodEstado(rs.getString("codigoEstado"));
            	documento.setFechaRecepcion(rs.getString("fechaRecepcion"));
            	documento.setNumExpediente(rs.getString("numeroExpediente"));
            	documento.setDescTipoMovimiento(rs.getString("descTipoMovimiento"));
            	documento.setCodTipoMovimiento(rs.getString("codTipoMovimiento"));
            	documento.setFlgGrabDoc(rs.getString("flgGrabDoc"));

            	lstDocumentos.add(documento);
            }
		}catch(Exception e){
			logger.error("[STD]: Error en filtrarDocumentosVincular: " + e.getMessage());
            e.printStackTrace();
		} 
		finally{
			cn.destroy(conn,null,rs,call,pre);
		}
		return lstDocumentos;
	}
}
